package com.qzdatasoft.autoconfigure.mcp.server;

import com.qzdatasoft.mcp.server.common.McpFactory;
import io.modelcontextprotocol.server.McpServerFeatures.SyncPromptSpecification;
import io.modelcontextprotocol.server.McpServerFeatures.SyncResourceSpecification;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import java.util.List;

@Configuration
public class McpServerAutoConfiguration {

    /**
     * 获取工具回调，必须是list的形式注入才能识别到
     * @return List
     */
    @Bean
//    @Primary
    public List<ToolCallback> toolCallbacks() {
        return McpFactory.getToolCallbackList().stream().toList();
    }

    /**
     * 创建并返回同步资源规格列表 Bean
     * 该 Bean 用于注入同步资源规格集合，必须以 List 形式注入才能被正确识别
     * 
     * @return 包含所有同步资源规格的不可变列表
     * @see McpFactory#getSyncResourceSpecificationList() 工厂方法获取原始资源列表
     * @see SyncResourceSpecification 同步资源规格的具体定义
     */
    @Bean
    public List<SyncResourceSpecification> resourceSpecifications() {
        return McpFactory.getSyncResourceSpecificationList().stream().toList();
    }

    /**
     * 创建并返回同步提示规范列表的Bean。
     * 该方法利用McpFactory获取同步提示规范的集合，并将其转换为不可变列表。
     * @return 包含所有同步提示规范的列表，每个规范用于定义特定场景下的同步提示行为。
     * @see McpFactory#getSyncPromptSpecificationList() 工厂方法获取提示列表
     * @see SyncPromptSpecification 同步资源规格的具体定义
     */
    @Bean
    public List<SyncPromptSpecification> promptSpecifications() {
        return McpFactory.getSyncPromptSpecificationList().stream().toList();
    }

}